// pages/xuanfeng/player.js
let index //点击的索引号
Page({
  play(e) { //播放点击的某一集视频
		let index = e.target.dataset.index //点击某一集的索引号
		let sourceIndex = this.data.sourceIndex //当前源的索引号
		let source = this.data.sources[sourceIndex] //当前源对象
		if (index >= source.list.length) return //索引号代表的视频不存在，就直接返回
		let video = source.list[index] //当前播放的视频对象
		let change = {
			url: video.url
		} //存储有变化的数据
		change[`sources[${sourceIndex}].list[${index}].selected`] = true //点击的视频处于选中的状态
		change[`sources[${sourceIndex}].listIndex`] = index //记录点击视频索引号
		this.setData(change)
	},
  async sources(e) { //切换不同的视频源
		let index = e.target.dataset.index //点击源的索引号
		let oldIndex = this.data.sourceIndex //原来的源的索引号
		let change = {
			sourceIndex: index,
		} //记录有变化的数据
		if (oldIndex != null) {
			//if (index == oldIndex) return //点击的和原来的相同，就不进行任何处理
			change['sources[' + oldIndex + '].selected'] = false //取消选中状态
		}
    change['sources[' + index + '].selected'] = true //选中的状态
		let source = this.data.sources[index] //当前的数据源对象
		if (source.list == null) { //当前数据源中尚未获得每一集的视频播放地址
			let url = `${this.host}${source.url}`
			let html = await this.request(url)
			if (html == null) { 
				wx.showModal({
					content: '读取网络信息出错啦~',
					showCancel: false,
				})
			}else{
				let regex = /const vo = JSON\.parse\("([^"]+)"/g
				let r = regex.exec(html)
				let d = JSON.parse(r[1].replaceAll('\\u0022', '"'))
				let list = [] //用来存放视频每一集的相关信息
				d.clips.forEach(item => {
					list.push({
						name: item[0], //每一集的名称
						url: item[1], //每一集的视频地址
					})
				})
				// source.list=list
				change[`sources[${index}].list`]=list
			}
		}
		this.setData(change, () => {
			if (!this.data.url) { //如果当前没有播放的视频，就默认播放 第01集
				this.play({
					target: {
						dataset: {
							index: 0
						}
					}
				}) 
			}
		})
	},
  timeupdate(e) {
		this.currentTime = e.detail.currentTime //记录当前的播放进度（秒）
	},
	onHide(){
		this.save()
	},
	onUnload(){
		this.save()
	},
  save() {
		if (!this.data.sources) return
		let pages = getCurrentPages() //获取当前页面栈
		let prePage = pages[pages.length - 2] //获取视频的列表页面
		let data = prePage.data //列表页面的数据
		let menu = data.menus[data.menuIndex] //获取当前菜单项
		let change = {} //记录有变化的数据
		let playMessage = {
			...this.data
		}
		delete playMessage.__webviewId__
		change[`menus[${data.menuIndex}].types[${menu.typeIndex}].list[${index}].playMessage`] = playMessage
		prePage.setData(change)
	},
	data:{
		currentTime:0,
	},
	request(url){ //准备发起一个请求 
		return new Promise((resolve, reject)=>{
			wx.request({
			  	url,
				success: r=>{
					resolve(r.data) //返回成功请求获取的数据
				},
				fail: e=>{
					resolve(null) //返回null表示获取失败
				}
			})
		})
	},
	async onLoad(options) {
		this.host='https://miao101.com'
		index=parseInt(options.index) //点击视频的索引号
		let pages=getCurrentPages() //获取当前页面栈
		let prePage=pages[pages.length-2] //获取视频的列表页面
		let data=prePage.data //列表页面的数据
		let menu=data.menus[data.menuIndex] //获取当前菜单项
		let type=menu.types[menu.typeIndex] //获取当前类型
    let video=type.list[index] //获取当前点击的视频对象
    if(video.playMessage){ //已经有视频相关信息
			this.setData(video.playMessage) //直接设置相关数据即可，无需从播放页面来获取
			return
		}
		let url=`${this.host}${video.url}` //视频播放页面的网址
		//console.log(video)
		let html=await this.request(url)
		// console.log(html)
		if(html!=null){
			let regex=/const vo = JSON\.parse\("([^"]+)"/g
			let r=regex.exec(html)
			let d=JSON.parse(r[1].replaceAll('\\u0022','"'))
			console.log(d)

      let sources=[] //记录视频的数据源
			d.headers.forEach(item=>{
				sources.push({
					id: item.ID,
					name: item.Name, //量子，淘片，....
				})
			})
			let list=[] //用来存放视频每一集的相关信息
			d.clips.forEach(item=>{
				list.push({
					name: item[0], //每一集的名称
					url: item[1], //每一集的视频地址
				})
			})
			sources[0].list=list //源0 对应的视频列表信息
			console.log(sources)
			let change = {
				title: video.title,
				sources
			}
			r = /<div class="text-break ft14">(.+)<\/div>/.exec(html)
			if (r != null) { //成功匹配简介的内容
				change.jj = ("<p>" + r[1]).replace(/(<\/?(p|br)[^>]*>|　)+/g, '\n　　')
			}
      this.setData(change, () => {
				if (sources.length > 0) {
					this.sources({
						target: {
							dataset: {
								index: 0
							}
						}
					}) //模拟点击第一个视频源
				}
			})

    }else{
			wx.showModal({
        content: '读取网络信息出错啦~',
				showCancel: false,
			})
		}
	},
})